"""
15、内置高阶函数
map(func, lst)，将传入的函数变量func作用到lst变量的每个元素
reduce(func，lst)，其中func必须有两个参数。
每次func计算的结果继续和序列的下一个元素做累积计算
filter(func, lst)函数用于过滤序列,
 			过滤掉不符合条件的元素, 返回一个 filter 对象
1）计算list1序列中各个数字的2次方
   list1=[1,2,3,4,5]
2）计算list2序列中各个数字的累加和
   list2=[1,2,3,4,5]
3）过滤掉list3中的奇数，使其元素均为偶数
   list3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
"""
list1 = [1, 2, 3, 4, 5]
list2 = [1, 2, 3, 4, 5]
list3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


def fun1(list, fn):
    sum = 0
    for i in list:
        if fn(i) != -1:
            sum += fn(i)
    return sum


double = lambda a: a * a
leijia = lambda a: a * a / 2 + a / 2


def oushu(a):
    if a % 2 == 0:
        return a
    return -1


print(fun1(list1, double))
print(fun1(list2, leijia))
print(fun1(list3, oushu))
